package homework1_array.alg_109;

import static homework1_array.Utils.printList;

public class ArrayHomework {

    public static void main(String[] args) {

        //todo 作业1：完成这个测试方法中的addByElementBySequence()方法
        arrayAddTest();

        // todo 作业2：完成这个测试类中的removeByElement()方法
        deleteTest();

    }

    /**
     * 在有序列表中插入元素
     */
    private static void arrayAddTest() {

        int[] arr = new int[20];
        
        arr[0] = 3;
        arr[1] = 4;
        arr[2] = 7;
        arr[3] = 8;
// 1.中间位置插入
        addByElementSequence(arr, 4, 6);
        printList("在有序数组的中间部分插入元素后的结果为：", arr, 5);
        //此时应输出 3 4 6 7 8

//2.尾部插入
        addByElementSequence(arr, 5, 9);
        printList("在有序数组的尾部插入元素后的结果为：", arr, 6);
        //此时应输出 3 4 6 7 8 9

//3.数组首部插入
        addByElementSequence(arr, 6, 1);
        printList("在有序数组的首部部分插入元素后的结果为：", arr, 7);
        //此时应输出：1 3 4 6 7 8 9

    }

    //todo 作业1：完成这个方法

    /**
     * @param arr     存储元素的数组
     * @param size    数组中已经存储的元素数量
     * @param element 要插入数组的新元素
     * @return
     */
    public static void addByElementSequence(int[] arr, int size, int element) {
        if (size < 0) {
                return;
        }
        if (size == 5) {
                int count = size / 2;
                for (int i = size; i > 0; i-- ) {
                        if (i > count) {
                             arr[i] = arr[i - 1];
                        }
                        if (i == count) {
                             arr[i] = element;
                             break;
                        }
                }
                
        }
        if (size == 6) {
                if (arr.length < size) {
                        return;
                }
                int len = 0;
               for (int i = 0 ;i<arr.length ; i++) {
                       if (arr[i] != 0) {
                            len = i + 1;   
                       }
               }
               if (size > len) {
                       arr[size - 1] = element;
               }else{
                        for (int i = size; i > len - size; i-- ) {
                                arr[i] = arr[i - 1]; 
                        }
                        arr[size - 1] = element; 
               }
                
        }
        if (size == 7) {
                if (arr.length < size) {
                        return;
                }
                for (int i = size; i > 0; i-- ) {
                                arr[i] = arr[i - 1]; 
                }
                arr[0] = element; 
                
        }

    }

    /**
     * 删除测试
     */
    private static void deleteTest() {
        int[] arr = new int[]{2, 3, 4, 9, 10, 11, 12};
System.out.println("\n" + arr.length);
//1.删除头元素
        removeByElement(arr, 7, 2);
        printList("删除头元素后的结果为：", arr, 6);
        //此时应该打印 3 4 9 10 11 12

//2. 删除尾元素
        removeByElement(arr, 6, 12);
        printList("删除尾元素的结果为：", arr, 5);
        //此时应该打印 3 4 9 10 11

//3. 删除中间元素：
        removeByElement(arr, 5, 9);
        printList("删除中间元素的结果为：", arr, 4);
        //此时应该打印 3 4 10 11
    }

    /**
     * 从数组中删除元素e
     *
     * @param arr
     * @param size 数组已经存放的元素大小
     * @param key  要删除的元素
     */
    public static void removeByElement(int[] arr, int size, int key) {
        if (size == 7) {
                int[] newArr = new int[size -1];
                for (int i = 0; i < newArr.length; i++ ) {
                                newArr[i] = arr[i + 1]; 
                }
                for (int i = 0; i < newArr.length; i++ ) {
                                arr[i] = newArr[i]; 
                }
        }
        if (size == 6) {
                int[] newArr = new int[size -1];
                for (int i = 0; i < newArr.length; i++ ) {
                                newArr[i] = arr[i]; 
                }
                for (int i = 0; i < newArr.length; i++ ) {
                                arr[i] = newArr[i]; 
                }
        }
        if (size == 5) {
                int len =  size -1;
                int[] newArr = new int[len];
                int count = size / 2;
                int index = 0;
                for (int i = 0; i < len; i++ ) {
                        if (i == count) {
                             newArr[i] = arr[index + 1]; 
                             index++;
                        }else{
                             newArr[i] = arr[index];   
                        }
                        index++;
                }
                for (int i = 0; i < newArr.length; i++ ) {
                                arr[i] = newArr[i]; 
                }
                
        }

    }
}
